﻿#define _CRT_SECURE_NO_WARNINGS 1


//有一个数字矩阵，矩阵的每行从左到右是递增的，矩阵从上到下是递增的，请编写程序在这样的矩阵中查找某个数字是否存在
//要求：时间复杂度小于O(N);

//
//#include<stdio.h>
//#include<stdbool.h>
//bool Find(int(*matrix)[5], int target)
//{  
//    int row = 0;
//    int col = 4; // 从右上角开始
//
//    while (row < 5 && col >= 0) {
//        int current = matrix[row][col];
//        if (current == target) {
//            return true; // 找到目标值
//        }
//        else if (current > target) {
//            col--; // 当前元素较大，左移一列
//        }
//        else {
//            row++; // 当前元素较小，下移一行
//        }
//    }
//
//    return false;
//}

//bool Find(int(*matrix)[5], int target)
//{
//    int row = 4;
//    int col = 0; // 从右上角开始
//
//    while (row >= 0  && col < 5) {
//        int current = matrix[row][col];
//        if (current == target) {
//            return true; // 找到目标值
//        }
//        else if (current > target) {
//            row--; // 当前元素较大，左移一列
//        }
//        else {
//            col++; // 当前元素较小，下移一行
//        }
//    }
//
//    return false;
//}
//
//int main()
//{
//	int arr[5][5] = { {1,2,3,4,5,} ,{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25} };
//	printf("请输入你想要查找的数字");
//	int n = 0;
//	scanf("%d", &n);
//	int m=Find(arr, n);
//    printf("%d",m);
//	return 0;
//}
//



//日本某地发生了一件谋杀案，警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
//以下为4个嫌疑犯的供词:
//A说：不是我。
//B说：是C。
//C说：是D。
//D说：C在胡说
//已知3个人说了真话，1个人说的是假话。
//现在请根据这些信息，写一个程序来确定到底谁是凶手。

//#include<stdio.h>
//#include<stdbool.h>
//bool A(int n)
//{
//	if (n == 1)
//		return false;
//	else
//		return true;
//}
//bool B(int n)
//{
//	if (n == 3)
//		return true;
//	else
//		return false;
//}
//bool C(int n)
//{
//	if (n == 4)
//		return true;
//	else
//		return false;
//}
//bool D(int n)
//{
//	if (C(n))
//		return false;
//	else
//		return true;
//}
//
//int main()
//{
//	for (int i = 1; i < 5; i++)
//	{ 
//		int m = A(i) + B(i) + C(i) + D(i);
//		if (m == 3)
//			printf("凶手是%d号", i);
//	}
//	return 0;
//}

//
//#define rows 20
//#include<stdio.h>
//
//int main()
//{
//	int k[rows][rows] = {0};
//	for (int i = 0; i < rows; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			if (i==0||j == 0 || j == i)
//			{
//				k[i][j] = 1;
//			}
//			else
//			{
//				k[i][j] = k[i-1][j-1]+ k[i-1][j];
//			}
//		}
//	}
//	for (int i = 0; i < rows; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			printf("%d ", k[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}


#include<stdio.h>
int add(int m, int n)
{
	return m + n;
}
int sub(int m, int n)
{
	return m - n;
}
int Mul(int m, int n)
{
	return m * n;
}
int div(int m, int n)
{
	return m / n;
}

void menu()
{
	printf("****************\n");
	printf("***1:add   2:sub**\n"); 
	printf("***3:Mul   4:div**\n");
	printf("***0:exit   *****\n");
	printf("****************\n");
}

int main()
{
	int input=1; int ret = 0;
	int x, y;
	int(*p[5])(int x, int y) = { 0,add,sub,Mul,div };
	do
	{
		menu();
		printf("请输入数字\n");
		scanf("%d", &input);
		if ((input <= 4 && input >= 1))
		{
			printf("输入操作数：");
			scanf("%d %d", &x, &y);
			ret = (*p[input])(x, y);
			printf("ret = %d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("输入有误\n");
		}

	} while (input);

	return 0;
}